package com.sawgdev.android.bokuiki.common;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import com.sawgdev.android.bokuiki.common.Constants.EnumDateFormat;

/**
 * 主に文字列整形などの役割を担うユーティリティクラスです。
 * @author y-yamaguchi
 *
 */
public class Util {

	/**
	 * システム日時をyyyy-MM-dd HH:mm:ss形式の文字列で返します。
	 * @return システム日時文字列
	 */
	public static String getSystemDateStr(){
		return calendarToStr(Calendar.getInstance(Locale.JAPANESE), EnumDateFormat.FORMAT_FULL);
	}

	/**
	 * 指定された日付文字列をCalendar型にして返します。
	 *
	 * @param strCalendar 日付文字列
	 * @param enm 日付フォーマットの列挙体
	 * @return <pre>
	 * Calendarオブジェクト
	 * 指定された文字列が日付型でない場合は今日の日付を返します。
	 * </pre>
	 */
	public static Calendar strToCalendar(String strCalendar, EnumDateFormat enm) {
		Calendar result = Calendar.getInstance(Locale.JAPANESE);
		try {
			SimpleDateFormat sdf = new SimpleDateFormat(EnumDateFormat.getValue(enm));
			result.setTime(sdf.parse(strCalendar));
		} catch (Exception e) {
			System.err.println(e.getMessage() + "\n" + e.getStackTrace());
		}
		return result;
	}

	/**
	 * 指定された日付（Calendar型）を文字列（yyyy-MM-dd HH:mm:ss）にして返します。
	 *
	 * @param calendar 画面上に表示する対象となる日付
	 * @param enm 日付フォーマットの列挙体
	 * @return <pre>
	 * 日付文字列
	 * 引数のcalendarがnullの場合は本日の日付文字列を返します。
	 */
	public static String calendarToStr(Calendar calendar, EnumDateFormat enm) {
		SimpleDateFormat sdf = new SimpleDateFormat(EnumDateFormat.getValue(enm));
		String result = "";
		if (calendar == null) {
			result = sdf.format(new Date());
		} else {
			result = sdf.format(calendar.getTime());
		}
		return result;
	}

	/**
	 * 日付に指定された日数分を追加した日付型を返します。
	 *
	 * @param calendar
	 *            加減対象の日付（Calendar型）
	 * @param addMinutes
	 *            加減する分
	 * @return 加減後の日付（Calendar型）
	 */
	public static Calendar addMinutes(Calendar calendar, int addMinutes) {
		Calendar result = null;
		if (calendar != null) {
			result = Calendar.getInstance();
			result.clear();
			result.set(calendar.get(Calendar.YEAR),
					calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
		}
		result.add(Calendar.MINUTE, addMinutes);
		return result;
	}
}
